    /* 20111020 ****************************************************/
    if (typeof ins !== "object") { var ins = {}; }
    var $ = function (sId) { return document.getElementById(sId); }
    //========================================================================
    ins.oNS = {
        "mathml": "http://www.w3.org/1998/Math/MathML"
       , "svg": "http://www.w3.org/2000/svg"
       , "xlink": "http://www.w3.org/1999/xlink"
       , "xsi": "http://www.w3.org/2001/XMLSchema-instance"
    };
    ins.a$ = function (sTag, oAtrs) {
        var oChild = this, aTag, sNS;
        if (typeof sTag === "undefined" && typeof oAtrs === "undefined") {
            while (this.hasChildNodes()) this.removeChild(this.lastChild);
            return this;
        }
        if (typeof sTag === "object" && typeof oAtrs === "undefined") {
            return ins.s$.call(this, sTag);
        }
        if (typeof sTag === "string" && sTag !== "") {
            if (sTag.indexOf(":") === -1) {
                oChild = document.createElement(sTag);
            } else {
                aTag = sTag.split(":");
                sNS = aTag[0];
                if (ins.oNS.hasOwnProperty(aTag[0])) {
                    oChild = document.createElementNS(ins.oNS[aTag[0]], aTag[1]);
                } else {
                    throw "namespace:" + aTag[0];
                }

            }
            if (typeof oAtrs === "object") {
                var oInsertBefore = oAtrs.insertBefore;
                if (typeof oInsertBefore === "object") {
                    oChild.removeAttribute("insertBefore");
                }
                ins.s$.call(oChild, oAtrs);
                if (typeof oInsertBefore === "object") {
                    this.insertBefore(oChild, oAtrs.insertBefore);
                } else {
                    this.appendChild(oChild);
                }
            } else {
                this.appendChild(oChild);
            }
        }
        return oChild;
    };
    ins.s$ = function (oAtrs) {
        if (typeof oAtrs !== "object") { throw oAtrs; }
        var sAtr, sStyle;
        for (sAtr in oAtrs) {
            if (!oAtrs.hasOwnProperty(sAtr)) { continue; }
            if (typeof oAtrs[sAtr] === "function") {
                this[sAtr] = oAtrs[sAtr];
            } else {
                switch (sAtr) {
                    case "style":
                        var aStyle, aStyles = oAtrs[sAtr].split(";");
                        for (sStyle in aStyles) {
                            if (aStyles.hasOwnProperty(sStyle)) {
                                aStyle = aStyles[sStyle].split(":");
                                if (aStyle.length >= 2 && aStyle[0].length > 0) {
                                    this.style[aStyle[0]] = decodeURIComponent(aStyle[1]);
                                }
                            }
                        }
                        break;
                    case "t":
                        this.appendChild(document.createTextNode(oAtrs[sAtr]));
                        break;
                    default:
                        if (typeof oAtrs[sAtr] === "string") {
                            this.setAttribute(sAtr, oAtrs[sAtr]);
                        } else {
                            this[sAtr] = oAtrs[sAtr];
                        }
                        break;
                }
            }
        }
        return this;
    };
    Element.prototype.a$ = function (sTag, oAtrs) { return ins.a$.call(this, sTag, oAtrs); };
    var bFragment = true;
    try {
        DocumentFragment.prototype.a$ = function (sTag, oAtrs) { return ins.a$.call(this, sTag, oAtrs); };
    } catch (e) { bFragment = false; }